﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Leo.Entities;


namespace Leo.Repository
{
    public class ClienteRepository: MasterRepository,IClienteRepository
    {

        public List<Cliente> GetAllFromCliente()
        {
            var query = from p in context.Clientes
                        select p;

            return query.ToList();
        }

        public Cliente GetClientebyDniRuc(string dniRuc)
        {
            return context.Clientes.Where(c => c.RucDni.Equals(dniRuc)).SingleOrDefault();
            
        }

        public List<Cliente> GetFromClienteByCriterio(string criterio)
        {
            var query = from p in context.Clientes
                        select p;
            if (criterio != "" & criterio != null & criterio != string.Empty)
            {
                query = from p in query
                        where p.NomRazonSocial.ToUpper().Contains(criterio.ToUpper())

                        select p;
            }

            return query.ToList();
        }

        public Cliente GetFromClienteById(int id_cliente)
        {
            return context.Clientes.Find(id_cliente);
        }

        public void AddCliente(Cliente cliente)
        {
            var existe = context.Clientes.Find(cliente.Id);
                if (existe==null)
                {
                    context.Clientes.Add(cliente);
                    context.SaveChanges();
                }
                else
                {
                    throw new Exception("El Cliente ya se encuentra registrado");
                }
        
        }

        public void UpdateCliente(Cliente cliente)
        {
            context.Entry(cliente).State = System.Data.EntityState.Modified;
            context.SaveChanges();
        }

        public void RemoveCliente(int id_cliente)
        {
            var existe = context.Clientes
                             .Where(p => p.Id.Equals(id_cliente))
                             .SingleOrDefault();

            if (existe != null)
            {
                context.Clientes.Remove(existe);
                context.SaveChanges();
            }
        }

        public bool Existeduplicidad(string dni, string razonsocial, int id)
        {
            var query = from p in context.Clientes
                        where p.NomRazonSocial.ToUpper().CompareTo(razonsocial.ToUpper()) == 0 &&
                        p.RucDni.CompareTo(dni.ToUpper()) == 0 && p.Id != id
                        select p;

            return query.Any();
        }
    }
}
